#ifndef __DRIVER_ESP8266_H__
#define __DRIVER_ESP8266_H__

#include <stdint.h>
#include "cmsis_os.h"

/*==============================================================================
 *                              宏定义
 *============================================================================*/
#define W_ENABLE          1
#define W_DISABLE         0
#define W_true            1
#define W_false           0
#define W_bool            uint8_t
#define MAX_RETRY_COUNT   5u
#define ARRAY_SIZE(x)     (sizeof(x) / sizeof((x)[0]))

/*==============================================================================
 *                              类型定义
 *============================================================================*/
/**
  * @brief 无线模块运行状态结构体
  */
typedef struct {
    uint8_t  receiveDataFlag;   ///< 数据接收标志
    uint8_t  sendDataFlag;      ///< 发送完成标志
    uint8_t  initFlag;          ///< 初始化成功标志
    uint16_t initErrorCode;     ///< 错误码
    uint8_t  receiveCMDFlag;    ///< 接收命令标志
} Wireless_TypeDef;

/**
  * @brief OneNET 命令属性结构体
  */
typedef struct {
    char *name;     ///< 属性名
    uint16_t value; ///< 属性值
} OneNET_CMD;

/*==============================================================================
 *                              外部声明
 *============================================================================*/
extern Wireless_TypeDef WirelessStatus;
extern OneNET_CMD lamp_level, lamp_mode, lamp_person, lamp_thr;

/*==============================================================================
 *                              外部函数声明
 *============================================================================*/
void Wireless_Init(void);
uint8_t wireless_receive_handler(void);
void wireless_publish_data(uint8_t intCount, const char *intIdf[], uint32_t intValues[],
                           uint8_t floatCount, const char *floatIdf[], float floatValues[],
                           uint8_t boolCount,  const char *boolIdf[],  W_bool boolValues[],
                           uint8_t strCount,   const char *strIdf[],   const char *strValues[]);
__weak void wireless_error_handler(uint16_t ErrorCode);

#endif /* __DRIVER_ESP8266_H__ */
